package com.itheima;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDema {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("张三");
        names.add("张无忌");
        names.add("张翠山");
        names.add("张翼德");
        names.add("张飞");
        names.add("张良");
        names.add("张三丰");
        names.add("张辽");


        List<String> list1 = new ArrayList<>();
        //遍历names集合
        names.forEach(name -> {
            //name以张开头？
            if(name.startsWith("Alice")) {
                //添加到list1集合中
                list1.add(name);
            }
        });
        List<String> list2 = new ArrayList<>();
        list1.forEach(name -> {
            if(name.length() ==3){
                //添加到list2集合中
                list2.add(name);
            }

        });
        list2.forEach(System.out::println);


        System.out.println("-----------------------------");
        //1.获取Streame对象
        //2.筛选
        //终结方法
        names.stream()
                .filter(s -> s.startsWith("张"))
                .filter(s -> s.length() == 3)
                .forEach(System.out::println);
    }


    public void test(){
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);

//        list.stream().filter(new Predicate<Integer>() {
//            @Override
//            public boolean test(Integer integer) {
//                return integer % 2 == 0 ;
//            }
//        });

        List<Integer> list1 = list.stream().filter(integer -> integer % 2 == 0).collect(Collectors.toList());
        System.out.println(list1);
        System.out.println(list);
    }

    @Test
    public void test2(){
        List<String> list = new ArrayList<>();
        list.add("zhangsan,23");
        list.add("lisi,25");
        list.add("wangwu,24");

        Map<Object, Object> map = list.stream().filter(s -> {
            //切分字符串lisr
            String[] split = s.split(",");
            int age = Integer.parseInt(split[1]);
            return age > 23;
        }).collect(Collectors.toMap(s -> {
            String[] split = s.split(",");
            return split[0];
        }, s -> {
            String[] split = s.split(",");
            return split[1];
        }));

        map.forEach((k,v) -> System.out.println(k + ":" + v));
    }


    @Test
    public void test3(){
        List<String> list1 = new ArrayList<>();
        list1.add("龙柯");
        list1.add("张无忌");
        list1.add("张三丰");
        list1.add("刘备");
        list1.add("关羽");
        list1.add("吴大帅");

        List<String> list2 = new ArrayList<>();
        list2.add("杨过");
        list2.add("林志颖");
        list2.add("杨幂");
        list2.add("黄蓉");
        list2.add("周星驰");
        list2.add("张国荣");

        Stream<String> stream1 = list1.stream().filter(s -> s.length() == 3).limit(2);

        Stream<String> stream2 = list2.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("杨");
            }
        }).skip(1);

        Stream.concat(stream1, stream2).forEach(System.out::println);
    }
}
